package jukebox.model.member;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import jukebox.model.common.CommentVO;
import jukebox.model.common.PagingBean;
import jukebox.model.qnaboard.QnABoardVO;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class MemberDAOImpl implements MemberDAO{
	@Resource(name="sqlSessionTemplate")
	private SqlSessionTemplate sqlSessionTemplate;
	
	/**
	* @method : registerMember
	* @author : 김지정
	* @since : 2014-06-23
	* @param : mvo - 등록될 회원 정보
	* @return : void
	* @comment : 회원가입 메서드
	*/
	@Override
	public void registerMember(MemberVO mvo){
		sqlSessionTemplate.insert("member.registerMember", mvo);
	}
	/**
	* @method : updateMember
	* @author : 김지정
	* @since : 2014-06-23
	* @param : mvo - 업데이트 될 회원 정보
	* @return : void
	* @comment : 회원정보 수정, id 제외한 모든 부분 수정가능
	*/
	@Override
	public void updateMember(MemberVO mvo){
		sqlSessionTemplate.update("member.updateMember", mvo);
	}
	/**
	* @method : dropoutMember
	* @author : 작성자
	* @since : 2014-06-20
	* @param : id - id로 검색해서 회원탈퇴
	* @return : void
	* @comment : 개인회원 탈퇴
	*/
	@Override
	public void dropoutMember(String id){
		sqlSessionTemplate.update("member.dropoutMember",id);
	}
	
	/**
	* @method : checkId
	* @author : 작성자
	* @since : 2014-06-24
	* @param : id - 회원가입시 중복체크할 id
	* @return : boolean 리턴타입에서 -> int 리턴타입으로 변경함
	* @comment : id 중복체크,
	*                   회원가입, 회원정보수정시 id 체크를 함
	*/
	@Override
	public int checkId(String id){
		return sqlSessionTemplate.selectOne("member.checkId", id);
	}
	/**
	* @method : checkNickname
	* @author : 작성자
	* @since : 2014-06-24
	* @param : nickname - 회원가입시 nickname 중복체크
	* @return : boolean 리턴타입에서 -> int 리턴타입으로 변경함
	* @comment :  회원가입, 회원정보수정시 nickname 체크를 함.
	*/
	@Override
	public int checkNickname(String nickname){
		return sqlSessionTemplate.selectOne("member.checkNickname",nickname);
	}
	/**
	* @method : checkPassword
	* @author : 작성자
	* @since : 2014-06-20
	* @param : mvo - 등록될 회원 정보
	* @return : int
	* @comment : 회원탈퇴시 비밀번호를 비교하여 탈퇴가능하다
	*/
	@Override
	public int checkPassword(MemberVO mvo){
		return sqlSessionTemplate.selectOne("member.checkPassword", mvo);
	}
	
	/**
	* @method : login
	* @author : 작성자
	* @since : 2014-06-20
	* @param : mvo - 등록될 회원 정보
	* @return : MemberVO
	* @comment : 로그인시 id 와 password 로 로그인 
	*/
	@Override
	public MemberVO login(MemberVO mvo){
		System.out.println("로그인 DAO 출력");
		return sqlSessionTemplate.selectOne("member.login", mvo);
	}


	/**
	* @method : ContentCount
	* @author : 김지정
	* @since : 2014-06-25
	* @return : int
	* @comment : 회원가입한 전체 회원 수
	*/
	public int contentCount(){
		return sqlSessionTemplate.selectOne("member.contentCount"); 
	}
	
	/**
	* @method : getAllMemberList
	* @author : 김지정
	* @since : 2014-06-25
	* @param : PagingBean 
	* @return : List<MemberVO>
	* @comment : 관리자권한으로  page 에 해당하는 멤버들을 조회
	*/
	@Override
	public List<MemberVO> allMemberList(PagingBean pb){
		return sqlSessionTemplate.selectList("member.getAllMemberList",pb);
	}
	/**
	* @method : dropoutMemberByAdmin
	* @author : 김지정
	* @since : 2014-06-25
	* @param : PagingBean 
	* @comment : 관리자권한으로 특정회원을 강제 탈퇴시킴
	*/
	@Override
	public void dropoutMemberByAdmin(String id) {
		sqlSessionTemplate.update("member.dropoutMemberByAdmin",id);
	}
	/**
	* @method : myBoardList
	* @author : 김지정
	* @since : 2014-06-26
	* @return : int
	* @param : map
	* @comment : 본인이 작성한 자유게시판의 글을 가져오는 페이징
	*/
	@Override
	public List<MemberVO> myBoardList(HashMap map) {
		System.out.println(map);
		return sqlSessionTemplate.selectList("member.myBoardList", map);
	}
	/**
	* @method : myBoardListById
	* @author : 김지정
	* @since : 2014-06-26
	* @return : int
	* @param : id 
	* @comment : 본인이 작성한 자유게시판 게시글 수를 가져옴
	*/
	@Override
	public int myBoardListById(String id) {
		return sqlSessionTemplate.selectOne("member.myBoardListById", id);
	}
	/**
	* @method : myqnaBoardCountbyId
	* @author : 김지정
	* @since : 2014-06-27
	* @return : int
	* @param : id 
	* @comment : 본인이 작성한 Q&A 게시판 게시글 수
	*/
	@Override
	public int myqnaBoardCountbyId(String id) {
		return sqlSessionTemplate.selectOne("member.myqnaBoardCountbyId", id);
	}
	/**
	* @method : myqnaBoardListbyId
	* @author : 김지정
	* @since : 2014-06-27
	* @return : List<QnABoardVO>
	* @comment : 회원아이디로 검색해서 본인이 쓴 Q&A게시글 페이징처리
	*/
	@Override
	public List<QnABoardVO> myqnaBoardListbyId(HashMap map) {
		return sqlSessionTemplate.selectList("member.myqnaBoardListbyId", map);
	}
	/**
	* @method : findId
	* @author : 김지정
	* @since : 2014-06-30
	* @return : MemberVO
	* @comment : 회원아이디로 검색해서 회원정보를 가져옴
	*/
	@Override
	public MemberVO findId(String id) {
		return sqlSessionTemplate.selectOne("member.findId",id);
	}
	/**
	* @method : getRankListByLike
	* @author : 최민석
	* @since : 2014-07-02
	* @return : List<MemberVO>
	* @comment : 추천수가 가장 많은 멤버를 가져와 순서대로 정렬한다.
	*/
	@Override
	public List<MemberVO> getRankListByLike() {
		return sqlSessionTemplate.selectList("member.getRankListByLike");
	}
	/**
	* @method : myqnaCommentCountbyId
	* @author : 김지정
	* @since : 2014-07-02
	* @return : int
	* @param : id 
	* @comment : 본인이 작성한 Q&A 총 댓글 수
	*/
	@Override
	public int myqnaCommentCountbyId(String id) {
		return sqlSessionTemplate.selectOne("qnaboard.myqnaCommentCountbyId",id);
	}
	/**
	* @method : myqnaCommentListbyId
	* @author : 김지정
	* @since : 2014-07-02
	* @return : 
	* @param : map
	* @comment : 본인이 작성한 Q&A 총 댓글 목록
	*/
	@Override
	public List myqnaCommentListbyId(HashMap map) {
		return sqlSessionTemplate.selectList("qnaboard.myqnaCommentListbyId",map);
	}
	/**
	* @method : myFreeBoardCommentCountbyId
	* @author : 김지정
	* @since : 2014-07-02
	* @return : int
	* @param : id
	* @comment : 본인이 작성한 자유게시판 총 댓글 수 
	*/
	@Override
	public int myFreeBoardCommentCountbyId(String id) {
		return sqlSessionTemplate.selectOne("freeboard.myFreeBoardCommentCountbyId",id);
	}
	/**
	* @method : myFreeBoardCommentListbyId
	* @author : 김지정
	* @since : 2014-07-02
	* @return : List
	* @param : map
	* @comment : 본인이 작성한 자유게시판 댓글을 가져오는 리스트 
	*/
	@Override
	public List myFreeBoardCommentListbyId(HashMap map) {
		return sqlSessionTemplate.selectList("freeboard.myFreeBoardCommentListbyId",map);
	}
	
	/**
	* @method : myMusicCommentCountbyId
	* @author : 조서영
	* @since : 2014-07-04
	* @return : 
	* @param : id-회원 아이디
	* @comment : 본인이 작성한 musicBoard 댓글의 전체 갯수 
	*/
	@Override
	public int myMusicCommentCountbyId(String id) {
		return sqlSessionTemplate.selectOne("musiccomment.myMusicCommentCountbyId",id);
	}
	/**
	* @method : findMyMusicCommentListPerPage
	* @author : 조서영
	* @since : 2014-07-04
	* @return : 
	* @param : map
	* @comment : 본인이 작성한 musicBoard 댓글의 리스트 보기
	*/
	@Override
	public List<CommentVO> findMyMusicCommentListPerPage(HashMap map) {
		return sqlSessionTemplate.selectList("musiccomment.findMyMusicCommentListPerPage",map);
	}
	/**
	* @method : getMyMusicContentCountById
	* @author : 김지정
	* @since : 2014-07-04
	* @return : int
	* @param : id
	* @comment : 본인이 작성한 musicBoard 게시글 리스트 수
	*/
	@Override
	public int getMyMusicContentCountById(String id) {
		return sqlSessionTemplate.selectOne("musicboard.getMyMusicContentCountById",id);
	}
	/**
	* @method : getMyMusicContentListById
	* @author : 김지정
	* @since : 2014-07-04
	* @return : List
	* @param : map
	* @comment : 본인이 작성한 musicBoard 게시글 리스트 목록보기
	*/
	@Override
	public List getMyMusicContentListById(HashMap map) {
		return sqlSessionTemplate.selectList("musicboard.getMyMusicContentListById",map);
	}
}
